package cn.infinite.security.annotation;

import java.lang.annotation.*;

/**
 * 自动验签组件
 */
@Target({ElementType.METHOD, ElementType.TYPE})
@Documented
@Retention(RetentionPolicy.RUNTIME)
public @interface AutoSignCheck {

    /**
     * appId 请求头参数名
     *
     * @return
     */
    String appIdHeaderName() default "";

    /**
     * 签名 请求头参数名
     *
     * @return
     */
    String signatureHeaderName() default "";

    /**
     * 唯一序列号 请求头参数名
     *
     * @return
     */
    String uniqueIdHeaderName() default "";

    /**
     * 是否开启重放攻击检测
     * @return
     */
    boolean enableResistReplayAttack() default false;

    /**
     * 业务表示 请求头参数名
     *
     * @return
     */
    String businessHeaderName() default "";

    /**
     * 排除无需参与签名的参数
     *
     * @return
     */
    String[] excludeParamNames() default {};

    /**
     * 手动指定哪些参数参与签名
     *
     * @return
     */
    String[] includeParamNames() default {};

    /**
     * 排除 安全端点 方法名称列表，当且仅当 此注解被标注在类上时
     * 此参数生效
     *
     * @return
     */
    String[] excludeEndPointMethodName() default {};

    /**
     * 手动指明 安全端点 方法名称列表，当且仅当 此注解被标注在类上时
     * 此参数生效
     *
     * @return
     */
    String[] includeEndPointMethodName() default {};

}
